![]() | MÓNADAS |
〈( M=a → a=(M=b) → M=b )〉
M produce a (o una expresión M se evalúa como a) y si a produce una computación que produce b, entonces la computación M produce b.
〈( (fmap f x) = ( [f([x↓])] ) )〉
f se aplica a cada uno de los componentes de x)
〈( f(x) = x*x )〉)
(a = (1 2 3 4))
(fmap f a) // ev. (1 4 9 16)
〈( f(x) = (x x+10)↓ )〉
(a = (1 2 3 4))
(fmap f a) // ev. (1 11 2 12 3 13 4 14)
〈( f(n) = ((n n) (n+1 n+2))↓ )〉
(x = (1 2 3 4))
(fmap f x) // ev.
((1 1) (2 3) (2 2) (3 4) (3 3) (4 5) (4 4) (5 6))
〈( f1(n) = 2*n )〉
〈( f2(n) = n*n )〉
〈( f3(n) = n+100 )〉
〈( T(n) = f3(f2(f1(n))) )〉
T(5) // ev. 200
〈( fοg = g(f) )〉 (composición de funciones) 〈( (fοg)οh ≡ fο(gοh) )〉.
(sqrt(r) ο sumar5(r))
(sumar5(sqrt(r))),
〈( sumar5(r) = r+5 )〉.
sqrt(r) devuelve la raíz cuadrada de r si es r>0 o el texto “error” si r<0. La función siguiente debe chequear primero, antes de aplicarla, que el resultado de la función anterior es un número y no un mensaje de error. Si detecta el mensaje de error, su respuesta debe ser también el mismo mensaje de error. La nueva función sería:
(sumar5(r) ← r≥0 →' "error")
〈( (M(f(r)) = (f(r) ← r≥0 →' "error") )〉
(sqrt(r) ο M(sumar5(r)))
| Mónada | Descripción |
| Maybe | Computaciones que pueden retornar o no un resultado |
| Identity | Mónada identidad |
| [] (List) | Computaciones que retornan múltiples resultados |
| IO | Computaciones que realizan Entrada/Salida |
| Error | Computaciones que pueden fallar o producir excepciones |
| State | Computaciones que mantienen el estado |
| Reader | Computaciones que leen datos |
| Writer | Computaciones que escriben datos |
| Cont | Computaciones que pueden interrumpirse o reiniciarse |